package tlias.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

//filter是一个过滤器层，指定的请求都会先到这边来，然后根据条件是否放行，只有放行之后才可以继续访问服务端controller
//@WebFilter(urlPatterns = "/*")//这里的/*代表拦截所有的请求（这里指定的是拦截的路径，这里的路径可以实具体路径，也可以是目录/emps/*，也可以是所有路径）
public class DemoFilter implements Filter {

    //初始化方法，只调用一次
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init 方法执行了");
    }

    //拦截到请求后调用，调用多次（这个方法是最重要的，因为他与拦截和放行请求有关）
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //放行前执行的语句
        System.out.println("DemoFilter拦截到了请求");

        //放行的操作(这里首先要调用的是上面方法传递进来的对象filterChain中的方法，然后向这个方法中传递两个参数，一个是servletRequest，另一个是servletResponse）
        //只有放行了，才能进到控制层中访问对应的服务端（并且在放行之后，第二次请求仍会回到Filter这个层中，但是不会再执行放行前的操作，而是直接执行放行后的操作）
        filterChain.doFilter(servletRequest,servletResponse);

        //放行后执行的语句
        System.out.println("DemoFilter已放行请求");
    }

    //销毁方法，只调用一次
    @Override
    public void destroy() {
        System.out.println("destroy 销毁方法执行了");
    }
}
